Skip to main content

Kubernetes Deployment

SyncNow works with Kubernetes as a cluster. Below is a sample Kubernetes SyncNow Cluster over postrgreSQL. The configuration consists of deployment file with secrets, readiness, liveliness, host affinity, service and nginx ingress.

PlaceholderDescriptionExample
{{ .Values.namespace }}Kubernetes namespaceqa
{{ .Values.domain }}Kubernetes DNS domainsyncnow.local
{{ .Values.repourl }}Repository where syncnow docker image can be foundartifacts.syncnow.local
{{ .Values.syncnowversion }}syncnow docker image version2.7.0

apiVersion: v1
kind: ConfigMap
metadata:  
  name: syncnow-webapp-configmap    
  labels:
    app: syncnow
data:
  webconfig: |
    }
      "apiEndpoint": "https://}} .Values.namespace }}.}} .Values.domain }}"
    }
---

```json
apiVersion: v1
kind: Secret
metadata:
  name: syncnow-db-password 
  labels:
    app: syncnow
type: Opaque
data:  
  password: UTF3MmUzcjR0NQ==
---
apiVersion: v1
kind: Service
metadata:
  name: syncnow-service  
  labels:
    app: syncnow
spec:
  type: ClusterIP
  ports:
    - port: 5030
      targetPort: 5030
  selector:
    app: syncnow
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: syncnow 
  labels:
    app: syncnow 
spec:
  replicas: 3
  selector:
    matchLabels:
      app: syncnow
  template:
    metadata:
      labels:
        app: syncnow            
    spec:               
      containers:
        - name: syncnow
          image: }} .Values.repourl }}/syncnowserver:}} .Values.syncnowversion }} 
          #image: artifacts.dev.syncnow.io/syncnowserver:latest
          resources:
            limits:
              memory: "1024Mi"              
          ports:
            - containerPort: 5030
          imagePullPolicy: Always
          securityContext:  
            readOnlyRootFilesystem: false  
            runAsNonRoot: true
            runAsUser: 999
          livenessProbe:
            httpGet:
              path: /api/v1.0/app/Configuration/IsServiceReady
              port: 5030          
            initialDelaySeconds: 10
            periodSeconds: 10            
          readinessProbe:
            httpGet:
              path: /api/v1.0/app/Configuration/IsServiceReady
              port: 5030
            initialDelaySeconds: 10
            periodSeconds: 10             
          volumeMounts:
            - name: syncnow-webapp-volume
              mountPath: /app/WebApp/app.json
              subPath: webconfig
          env:
            - name: SETTINGS__DATABASECONFIGURATION__DATABASETYPE
              value: PostgreSQL
            - name: SETTINGS__DATABASECONFIGURATION__SERVER
              value: postgre}} .Values.namespace }}-postgresql
            - name: SETTINGS__DATABASECONFIGURATION__PORT
              value: "5432"
            - name: SETTINGS__DATABASECONFIGURATION__USERNAME
              value: SyncNowUser
            - name: SETTINGS__DATABASECONFIGURATION__PASSWORD
              valueFrom:
                secretKeyRef:
                  name: syncnow-db-password 
                  key: password
            - name: SETTINGS__DATABASECONFIGURATION__TRANSPORTENCRYPT
              value: "False"
            - name: SETTINGS__DATABASECONFIGURATION__DATABASE
              value: SyncNow           
            - name: KESTREL__ENDPOINTS__HTTP__URL
              value: http://+:5030
            - name: KESTREL__ENDPOINTS__HTTPS__URL
              value: https://+:5031
      volumes:
        - name: syncnow-webapp-volume
          configMap:
            name: syncnow-webapp-configmap             
      imagePullSecrets:
        - name: repoProd
      affinity:
              podAntiAffinity:
                preferredDuringSchedulingIgnoredDuringExecution:
                  - weight: 100
                    podAffinityTerm:
                      labelSelector:
                        matchExpressions:
                          - key: "app"
                            operator: In
                            values:
                            - syncnow
                      topologyKey: "kubernetes.io/hostname"
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: syncnowingress  
  annotations:    
    ingress.kubernetes.io/ssl-passthrough: "true"
    kubernetes.io/ingress.class: nginx           
spec:
  tls:
    - hosts:
      - }} .Values.namespace }}.}} .Values.domain }}
      secretName: syncnowdev
  rules: 
  - host: }} .Values.namespace }}.}} .Values.domain }}
    http:
      paths:
      - path: /
        backend:
          serviceName: syncnow-service
          servicePort: 5030